--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Commit 6147415da920d21e26c9f2eb7fe86eac7a685b3c
Parents : 97fd604
Author : Ivan <ivan@quad4.io>
Signature : Signature validation error
Date : 2026-04-14T19:35:13-05:00
feat(network-visualiser): add utility functions for trail positioning and view bounds, and define visualiser constants
Changes
3 files changed, 34 insertions(+), 0 deletions(-)
Diff
diff --git a/meshchatx/src/frontend/components/network-visualiser/internal/trailUtils.js b/meshchatx/src/frontend/components/network-visualiser/internal/trailUtils.js
new file mode 100644
index 00000000..379eb2f9
--- /dev/null
+++ b/meshchatx/src/frontend/components/network-visualiser/internal/trailUtils.js
@@ -0,0 +1,16 @@
+export function getPositionAlongTrail(trail, distBehind) {
+ if (!trail || trail.length === 0) return { x: 0, y: 0 };
+ if (trail.length === 1) return { ...trail[0] };
+ let d = 0;
+ for (let i = trail.length - 1; i > 0; i--) {
+ const p = trail[i];
+ const q = trail[i - 1];
+ const seg = Math.hypot(p.x - q.x, p.y - q.y);
+ if (d + seg >= distBehind) {
+ const t = seg > 0 ? (distBehind - d) / seg : 0;
+ return { x: p.x + (q.x - p.x) * t, y: p.y + (q.y - p.y) * t };
+ }
+ d += seg;
+ }
+ return { ...trail[0] };
+}
diff --git a/meshchatx/src/frontend/components/network-visualiser/internal/viewBounds.js b/meshchatx/src/frontend/components/network-visualiser/internal/viewBounds.js
new file mode 100644
index 00000000..435c008b
--- /dev/null
+++ b/meshchatx/src/frontend/components/network-visualiser/internal/viewBounds.js
@@ -0,0 +1,17 @@
+export function getViewCanvasBounds(network) {
+ const container = document.getElementById("network");
+ if (!container || !network) return null;
+ const scale = network.getScale();
+ const vp = network.getViewPosition();
+ const w = container.clientWidth;
+ const h = container.clientHeight;
+ const halfW = w / (2 * scale);
+ const halfH = h / (2 * scale);
+ return {
+ left: vp.x - halfW,
+ right: vp.x + halfW,
+ top: vp.y - halfH,
+ bottom: vp.y + halfH,
+ scale,
+ };
+}
diff --git a/meshchatx/src/frontend/components/network-visualiser/internal/visualiserConstants.js b/meshchatx/src/frontend/components/network-visualiser/internal/visualiserConstants.js
new file mode 100644
index 00000000..6dd3096f
--- /dev/null
+++ b/meshchatx/src/frontend/components/network-visualiser/internal/visualiserConstants.js
@@ -0,0 +1 @@
+export const PONG_NODE_IDS = ["__pong_ball", "__pong_pad_l", "__pong_pad_r", "__pong_hud"];
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────